package com.pet.service.impl;


import com.pet.context.BaseContext;
import com.pet.controller.AI.sparkAI.SparkAi;
import com.pet.dto.web.PetInfoQuestionnaireDTO;
import com.pet.entity.PetInfoQuestionnaire;
import com.pet.exchange.PetInfoQuestionnaireUtil;
import com.pet.mapper.PetInfoQuestionnaireMapper;
import com.pet.mapper.PetInformationMapper;
import com.pet.result.Result;
import com.pet.service.PetInfoQuestionnaireService;
import com.pet.vo.web.PetInfoQuestionnaireVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class PetInfoQuestionnaireImpl implements PetInfoQuestionnaireService {

    @Autowired
    private PetInfoQuestionnaireMapper petInfoQuestionnaireMapper;
    @Autowired
    private PetInformationMapper petInformationMapper;
    @Autowired
    private SparkAi sparkAi;


    /**
     * 添加健康问卷
     * @param petInfoQuestionnaireDTO
     */
    public void insertQuestionnaire(PetInfoQuestionnaireDTO petInfoQuestionnaireDTO) {
        PetInfoQuestionnaire petInfoQuestionnaire = new PetInfoQuestionnaire();
        BeanUtils.copyProperties(petInfoQuestionnaireDTO,petInfoQuestionnaire);
        log.info("添加健康问卷 petInfoQuestionnaire:{}",petInfoQuestionnaire);
        petInfoQuestionnaireMapper.insertQuestionnaire(petInfoQuestionnaire);

    }

    /**
     * 删除健康问卷
     * @param id
     */
    public void deleteQuestionnaire(Integer id) {

        petInfoQuestionnaireMapper.deleteQuestionnaire(id);
    }

    /**
     * 根据用户查询宠物健康问卷列表
     * @return
     */
    public List<PetInfoQuestionnaireVO> selectQuestionnaireList() {
        //修改类
        PetInfoQuestionnaireUtil petInfoQuestionnaireUtil = new PetInfoQuestionnaireUtil();
        //宠物健康问卷VO
        List<PetInfoQuestionnaireVO> voList = new ArrayList<>();
        //根据用户id获取宠物id
        List<Integer> petIds = petInformationMapper.selectPetIdListByUserId(BaseContext.getCurrentId());
        for (Integer petId : petIds) {
            //根据宠物id获取宠物问卷调查信息
            List<PetInfoQuestionnaire> eList = petInfoQuestionnaireMapper.selectQuestionnaireList(petId);
            log.info("PetInfoQuestionnaireList:{}",eList);
            //对数据内容进行修改
            for (PetInfoQuestionnaire petInfoQuestionnaire : eList) {
                PetInfoQuestionnaireVO vo = petInfoQuestionnaireUtil.convertToVO(petInfoQuestionnaire);
                vo.setId(petInfoQuestionnaire.getId());
                vo.setExtraInfo(petInfoQuestionnaire.getExtraInfo());
                log.info("{}\n{}",vo,petInfoQuestionnaire);
                voList.add(vo);
            }
        }
        return voList;
    }

    /**
     * 根据健康问卷内容询问AI
     *
     * @param id
     * @return
     */
    public String selectQuestionnaireAI(Integer id)   {
        PetInfoQuestionnaire petInfoQuestionnaire = petInfoQuestionnaireMapper.selectQuestionnaireById(id);
        new Result();
        Result result;
        try {
            result = sparkAi.petInfoQuestionnaireAi(petInfoQuestionnaire);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return result.getData().toString();
    }

    /**
     * 修改健康问卷
     * @param petInfoQuestionnaireDTO
     */
    public void updateQuestionnaire(PetInfoQuestionnaireDTO petInfoQuestionnaireDTO) {
        PetInfoQuestionnaire petInfoQuestionnaire = new PetInfoQuestionnaire();
        BeanUtils.copyProperties(petInfoQuestionnaireDTO,petInfoQuestionnaire);
        log.info("修改健康问卷 petInfoQuestionnaire:{}",petInfoQuestionnaire);
        petInfoQuestionnaireMapper.updateQuestionnaire(petInfoQuestionnaire);

    }
}
